/**
 * Copyright ©2003~2019年4月30日 szkingdom
 * @author raohj
 * @date 2019年4月30日
 * @file RSyncThread.java
 * @comment : please input your comment to this file
 * @version : input version
 * @modify:
 * 		1、 2019年4月30日 由 raohj 新建文件
 */
package com.ccnu.demojava.concurrent.thread;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author raohj
 * @date 2019年4月30日
 * @version 
 * @comment 测试线程的同步
 */
public class RThreadSync extends Thread{
	private static final Logger log = LoggerFactory.getLogger(RThreadSync.class);

	private static final Object lock = new Object();
	private RThreadSyncMethod syncMethd = null;
	
	public static class RThreadSyncMethod {
		/**
		 * @author raohj
		 * @date 2019年4月8日
		 * @comment 测试同步方法
		 * @param 
		 * @return 
		 * @throws InterruptedException
		 */
		synchronized public void testSync() throws InterruptedException {
			log.info("[" + Thread.currentThread().threadId() + "] start run");
			sleep(10000);
			log.info("[" + Thread.currentThread().threadId() + "] end run");
		}
	}
	
	/**
	 * 
	 */
	public RThreadSync(RThreadSyncMethod syncMethd) {
		this.syncMethd = syncMethd;
	}
	
	@Override
	public void run() {
		try {
			// 同步方法
			syncMethd.testSync();
			
			// 同步代码块
			synchronized (lock) {
				log.info("[" + Thread.currentThread().threadId() + "] synchronized block code");
				sleep(2000);
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}